// utils/request.js
import apiConfig, { getBaseUrl } from '../apis/apiConfig.js';

// 请求拦截器
const requestInterceptor = (config) => {
  // 可以在这里添加请求前的处理逻辑
  // 比如添加token等
  const token = uni.getStorageSync('token');
  console.log('请求拦截器 - Token:', token);
  if (token) {
    config.header = config.header || {};
    // JWT token不需要添加Bearer前缀
    config.header.Authorization = token;
    console.log('添加认证头:', config.header.Authorization);
  } else {
    console.log('未找到Token，跳过认证头添加');
  }
  return config;
};

// 响应拦截器
const responseInterceptor = (response) => {
  // 可以在这里添加响应后的处理逻辑
  // 比如统一处理错误码等
  console.log('响应拦截器 - 状态码:', response.statusCode);
  return response;
};

const request = (options) => {
  // 显示加载提示
  if (options.showLoading !== false) {
    uni.showLoading({
      title: options.loadingText || '加载中...'
    });
  }

  
  // 应用请求拦截器
  const config = requestInterceptor({
    url: options.url,  // 直接使用传入的URL，让代理处理跨域
    method: options.method || 'POST', // 使用配置的方法，默认为POST
    data: options.data || {},
    header: {
      'Content-Type': 'application/json',
      ...options.header
    },
    ...options
  });

  // 打印请求URL，方便调试
  console.log('Request URL:', config.url);
  console.log('Request Method:', config.method);
  console.log('Request Data:', config.data);
  console.log('Request Headers:', config.header);

  return new Promise((resolve, reject) => {
    uni.request({
      ...config,
      success: (res) => {
        // 应用响应拦截器
        const response = responseInterceptor(res);
        
        // 隐藏加载提示
        if (options.showLoading !== false) {
          uni.hideLoading();
        }
        
        // 根据状态码处理
        if (response.statusCode === 200) {
          console.log('请求成功:', response.data);
          resolve(response.data);
        } else if (response.statusCode === 401) {
          // 401错误处理 - 未授权
          console.log('401错误 - 未授权');
          uni.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none'
          });
          
          // 清除本地存储的用户信息
          uni.removeStorageSync('token');
          uni.removeStorageSync('userInfo');
          
          // 跳转到登录页面
          setTimeout(() => {
            uni.redirectTo({
              url: '/pages/login/login'
            });
          }, 1500);
          
          reject(response);
        } else if (response.statusCode === 404) {
          uni.showToast({
            title: '请求的接口不存在',
            icon: 'none'
          });
          console.error('接口不存在，请检查URL是否正确:', config.url);
          reject(response);
        } else {
          console.log('请求失败 - 状态码:', response.statusCode, '响应:', response);
          uni.showToast({
            title: response.data?.message || '请求失败',
            icon: 'none'
          });
          reject(response);
        }
      },
      fail: (err) => {
        // 隐藏加载提示
        if (options.showLoading !== false) {
          uni.hideLoading();
        }
        
        uni.showToast({
          title: '网络连接失败',
          icon: 'none'
        });
        console.error('网络请求失败:', err);
        reject(err);
      }
    });
  });
};

export default request;